#ifndef MEASUREMENTMANAGEMENTPLUGIN_H
#define MEASUREMENTMANAGEMENTPLUGIN_H

#include <QObject>
#include "CameraPluginInterface.h"
#include "MeasurementAlgorithmManager.h"
#include "MeasurementControlWidget.h"

class MeasurementManagementPlugin :public CameraPluginInterface {
    Q_OBJECT
    Q_INTERFACES(CameraPluginInterface)
    Q_PLUGIN_METADATA(IID "Camera.CameraPluginInterface/1.0")
public:
    /**
     * @brief 构造函数，初始化测量插件管理器
     * @param parent 父对象指针，用于内存管理
     */
    explicit MeasurementManagementPlugin(QObject *parent = nullptr);

    /**
     * @brief 析构函数，清理所有注册的测量算法资源
     */
    ~MeasurementManagementPlugin() override;

    /**
     * @brief 插件初始化接口（继承自CameraPluginInterface）
     */
    void initialize() override;

    /**
     * @brief 获取插件唯一名称（继承自CameraPluginInterface）
     * @return QString 插件名称（如"MeasurementManagement"）
     */
    QString pluginName() const override;

    /**
     * @brief 获取插件描述信息（继承自CameraPluginInterface）
     * @return QString 插件功能说明文本
     */
    QString description() const override;

    // 公开的测量执行函数
    Q_INVOKABLE void executeMeasurement(const QVariant& algorithmName, const QVariant& imageId, const QVariant& measurementType);
public slots:
    /**
     * @brief 接收跨插件消息（继承自CameraPluginInterface）
     * @param sender 消息发送者插件名称
     * @param message 消息内容
     */
    void onPluginMessage(const QString& sender, const QString& message) override;

private:
    // 统一处理撤销和重做操作的私有函数
    void handleUndoRedoOperation(const QString& imageGuid, bool isUndo);
private:
    // 测量算法管理器
    MeasurementAlgorithmManager *m_pMeasurementAlgorithmManager;
    // 测量控制界面
    MeasurementControlWidget *m_pMeasurementControlWidget;
};

#endif // MEASUREMENTMANAGEMENTPLUGIN_H
